package br.ucb.ucblive.HIB;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import br.ucb.ucblive.beans.Evento;
import br.ucb.ucblive.beans.Usuario;

public class EventoHIB {

	@SuppressWarnings("unchecked")
	public List<Evento> listar() {
		Session session = HibernateUtil.getSession();
		try {
			return session.createCriteria(Evento.class).list();
		} finally {
			session.close();
		}
	}
	
	
	public void salvar(Evento evento) {
		Session session = HibernateUtil.getSession();
		Transaction transaction = session.beginTransaction();
		session.saveOrUpdate(evento);
		transaction.commit();
		session.close();
	}
	
	
	public Evento consultar(int idEvento) {
		Session session = HibernateUtil.getSession();
		try {
			Evento evento = (Evento) session.get(Evento.class,idEvento);
			return evento;
		} finally {
			session.close();
		}
	}
	
	public void excluir(Evento evento) {
		Session session = HibernateUtil.getSession();
		Transaction transaction = session.beginTransaction();
		session.delete(evento);
		transaction.commit();
		session.close();
		
	}


	@SuppressWarnings("unchecked")
	public List<Evento> listarByUsuario(Usuario usuarioLogin) {
		Session session = HibernateUtil.getSession();
		try {
			if(usuarioLogin.getTipo()==1){
				return session.createCriteria(Evento.class).
						createAlias("usuario", "usuario").
						add(Restrictions.eq("usuario.login", usuarioLogin.getLogin())).
						list();
			}
			else if(usuarioLogin.getTipo()==2){
				return session.createCriteria(Evento.class).
						createAlias("curso", "curso").
						createAlias("curso.disciplinaCurso", "disciplina").
						createAlias("disciplina.disciplinaProfessor", "professor").
						createAlias("professor.usuario", "usuario").
						setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).
						add(Restrictions.eq("usuario.login", usuarioLogin.getLogin())).
						list();
			}
			else if(usuarioLogin.getTipo()==3){
				return session.createCriteria(Evento.class).
						createAlias("curso", "curso").
						createAlias("curso.alunos", "aluno").
						createAlias("aluno.usuario", "usuario").
						add(Restrictions.eq("usuario.login", usuarioLogin.getLogin())).
						list();
			}
			
		} finally {
			session.close();
		}
		return new ArrayList<Evento>();
	}
}
